import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'

export default defineConfig({
  plugins: [
    uni(),
    AutoImport({
      // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
      imports: [
        'vue',
        {
          // '@/store/index.js': [
          // 	['default', 'store']
          // ], // 接口模块
          '@/api/index.js': ['apiModules'] // 接口模块
          // '@/lang/index.js': [
          // 	['default', 'i18n']
          // ], // 全局国际化模块
          // dayjs: [
          // 	['default', 'dayjs']
          // ], // 日期处理模块
          // '@/utils/index.js': ['getViteImageUrl'], // 公共方法模块
        }
      ],
      // resolvers: [],
      eslintrc: {
        enabled: false,
        filepath: './.eslintrc-auto-import.json',
        globalsPropValue: true
      },
      vueTemplate: true,
      // 配置文件生成位置(false:关闭自动生成)
      // dts: false,
      dts: 'typings/auto-imports.d.ts'
    }),
    Components({
      // resolvers: [],
      // 指定自定义组件位置(默认:pages/components) 可以自动在界面该组件
      dirs: ['pages/components'],
      // 配置文件位置 (false:关闭自动生成)
      // dts: false,
      dts: 'typings/components.d.ts'
    })
  ],
  // 构建配置
  build: {
    chunkSizeWarningLimit: 2000, // 消除打包大小超过500kb警告
    minify: 'terser', // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效
    terserOptions: {
      compress: {
        keep_infinity: true, // 防止 Infinity 被压缩成 1/0，这可能会导致 Chrome 上的性能问题
        drop_console: true, // 生产环境去除 console
        drop_debugger: true // 生产环境去除 debugger
      },
      format: {
        comments: false // 删除注释
      }
    },
    rollupOptions: {
      output: {
        manualChunks: {
          // 'vue-i18n': ['vue-i18n'],
          // 'uview-plus': ['uview-plus'],
          // '@vueuse-core': ['@vueuse/core']
        },
        // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
        entryFileNames: 'js/[name].[hash].js',
        // 用于命名代码拆分时创建的共享块的输出命名
        chunkFileNames: 'js/[name].[hash].js',
        // 用于输出静态资源的命名，[ext]表示文件扩展名
        assetFileNames: assetInfo => {
          const info = assetInfo.name.split('.')
          let extType = info[info.length - 1]
          // console.log('文件信息', assetInfo.name)
          if (
            /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name)
          ) {
            extType = 'media'
          } else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) {
            extType = 'img'
          } else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) {
            extType = 'fonts'
          }
          return `${extType}/[name].[hash].[ext]`
        }
      }
    }
  }
})
